/**
 * 赛博侦探游戏AI Agent系统测试脚本
 * 用于验证案件生成、嫌疑人对话和调查工作流的基本功能
 */

import { generateCase } from '../mastra/agents/case-generator.agent';
import { chatWithSuspect } from '../mastra/agents/suspect.agent';
import { executeInvestigationWorkflow } from '../mastra/index';

/**
 * 测试案件生成功能
 */
async function testCaseGeneration() {
  console.log('\n=== 测试案件生成 ===');
  
  try {
    const caseData = await generateCase('easy', '办公室', 3);
    
    console.log('✅ 案件生成成功');
    console.log('案件标题:', caseData.case.title);
    console.log('案件描述:', caseData.case.description);
    console.log('嫌疑人数量:', caseData.suspects.length);
    console.log('初始线索数量:', caseData.initialClues.length);
    
    return caseData;
  } catch (error) {
    console.error('❌ 案件生成失败:', error);
    return null;
  }
}

/**
 * 测试嫌疑人对话功能
 */
async function testSuspectChat(suspectData: any) {
  console.log('\n=== 测试嫌疑人对话 ===');
  
  try {
    const response = await chatWithSuspect(
      suspectData,
      '你当时在哪里？',
      [],
      15,
      []
    );
    
    console.log('✅ 嫌疑人对话成功');
    console.log('嫌疑人回应:', response.content);
    console.log('情绪状态:', response.emotion);
    console.log('可疑程度:', response.suspicionLevel);
    console.log('新线索数量:', response.newClues.length);
    
    return response;
  } catch (error) {
    console.error('❌ 嫌疑人对话失败:', error);
    return null;
  }
}

/**
 * 测试调查工作流
 */
async function testInvestigationWorkflow() {
  console.log('\n=== 测试调查工作流 ===');
  
  try {
    // 测试开始新案件
    const startResult = await executeInvestigationWorkflow({
      action: 'start_case',
      caseGenerationRequest: {
        difficulty: 'easy',
        theme: '办公室',
        suspectCount: 3
      },
      gameId: 'test-game-001'
    });
    
    if (startResult.success) {
      console.log('✅ 工作流 - 开始案件成功');
      console.log('游戏状态:', startResult.gameState?.phase);
      console.log('剩余时间:', startResult.gameState?.timeRemaining);
      
      // 测试获取游戏状态
      const statusResult = await executeInvestigationWorkflow({
        action: 'get_status',
        gameId: 'test-game-001'
      });
      
      if (statusResult.success) {
        console.log('✅ 工作流 - 获取状态成功');
        console.log('当前阶段:', statusResult.gameState?.phase);
      } else {
        console.error('❌ 工作流 - 获取状态失败:', statusResult.message);
      }
      
    } else {
      console.error('❌ 工作流 - 开始案件失败:', startResult.message);
    }
    
    return startResult;
  } catch (error) {
    console.error('❌ 调查工作流测试失败:', error);
    return null;
  }
}

/**
 * 运行所有测试
 */
async function runAllTests() {
  console.log('🚀 开始测试赛博侦探游戏AI Agent系统\n');
  
  const startTime = Date.now();
  
  // 测试1: 案件生成
  const caseData = await testCaseGeneration();
  
  // 测试2: 嫌疑人对话（如果案件生成成功）
  if (caseData && caseData.suspects && caseData.suspects.length > 0) {
    await testSuspectChat(caseData.suspects[0]);
  }
  
  // 测试3: 调查工作流
  await testInvestigationWorkflow();
  
  const endTime = Date.now();
  const duration = (endTime - startTime) / 1000;
  
  console.log(`\n🎉 测试完成，总耗时: ${duration.toFixed(2)}秒`);
}

/**
 * 简单的性能测试
 */
async function performanceTest() {
  console.log('\n=== 性能测试 ===');
  
  const testCount = 3;
  const results = [];
  
  for (let i = 0; i < testCount; i++) {
    const startTime = Date.now();
    
    try {
      await generateCase('easy', undefined, 3);
      const endTime = Date.now();
      const duration = endTime - startTime;
      results.push(duration);
      
      console.log(`测试 ${i + 1}: ${duration}ms`);
    } catch (error) {
      console.error(`测试 ${i + 1} 失败:`, error);
    }
  }
  
  if (results.length > 0) {
    const avgTime = results.reduce((a, b) => a + b, 0) / results.length;
    const minTime = Math.min(...results);
    const maxTime = Math.max(...results);
    
    console.log(`\n性能统计:`);
    console.log(`平均时间: ${avgTime.toFixed(2)}ms`);
    console.log(`最短时间: ${minTime}ms`);
    console.log(`最长时间: ${maxTime}ms`);
  }
}

/**
 * 主函数
 */
async function main() {
  try {
    await runAllTests();
    await performanceTest();
  } catch (error) {
    console.error('测试过程中发生错误:', error);
    process.exit(1);
  }
}

// 如果直接运行此文件，则执行测试
if (require.main === module) {
  main();
}

export {
  testCaseGeneration,
  testSuspectChat,
  testInvestigationWorkflow,
  runAllTests,
  performanceTest
};